#include "Static.hpp"

namespace sf
{
// Audio
#ifdef AUDIOPACKAGE
	void ListenerSetGlobalVolume(sf::Listener& listener, float volume)
	{
		listener.SetGlobalVolume(volume);
	}

	float ListenerGetGlobalVolume(sf::Listener& listener)
	{
		return listener.GetGlobalVolume();
	}

	void ListenerSetPosition(sf::Listener& listener, float x, float y, float z)
	{
		listener.SetPosition(x, y, z);
	}

	void ListenerSetPosition(sf::Listener& listener, const sf::Vector3f& position)
	{
		listener.SetPosition(position);
	}

	sf::Vector3f ListenerGetPosition(sf::Listener& listener)
	{
		return listener.GetPosition();
	}

	void ListenerSetDirection(sf::Listener& listener, float x, float y, float z)
	{
		listener.SetDirection(x, y, z);
	}

	void ListenerSetDirection(sf::Listener& listener, const sf::Vector3f& direction)
	{
		listener.SetDirection(direction);
	}

	sf::Vector3f ListenerGetDirection(sf::Listener& listener)
	{
		return listener.GetDirection();
	}
#endif //AUDIOPACKAGE

// Graphics
	sf::Shape LineShape(sf::Shape& shape, float p1x, float p1y, float p2x, float p2y, float thickness, const sf::Color& color, float outline, const sf::Color& outlineColor)
	{
		return shape.Line(p1x, p1y, p2x, p2y, thickness, color, outline, outlineColor);
	}

	sf::Shape LineShape(sf::Shape& shape, const sf::Vector2f& start, const sf::Vector2f& end, float thickness, const sf::Color& color, float outline, const sf::Color& outlineColor)
	{
		return shape.Line(start, end, thickness, color, outline, outlineColor);
	}

	sf::Shape RectangleShape(sf::Shape& shape, float left, float top, float width, float height, const sf::Color& color, float outline, const sf::Color& outlineColor)
	{
		return shape.Rectangle(left, top, width, height, color, outline, outlineColor);
	}

	sf::Shape RectangleShape(sf::Shape& shape, const sf::FloatRect& rectangle, const sf::Color& color, float outline, const sf::Color& outlineColor)
	{
		return shape.Rectangle(rectangle, color, outline, outlineColor);
	}

	sf::Shape CircleShape(sf::Shape& shape, float x, float y, float radius, const sf::Color& color, float outline, const sf::Color& outlineColor)
	{
		return shape.Circle(x, y, radius, color, outline, outlineColor);
	}

	sf::Shape CircleShape(sf::Shape& shape, const sf::Vector2f& center, float radius, const sf::Color& color, float outline, const sf::Color& outlineColor)
	{
		return shape.Circle(center, radius, color, outline, outlineColor);
	}

	sf::Matrix3 Transformation(sf::Matrix3& matrix, const sf::Vector2f& origin, const sf::Vector2f& translation, float rotation, const sf::Vector2f& scale)
	{
		return matrix.Transformation(origin, translation, rotation, scale);
	}

	sf::Matrix3 Projection(sf::Matrix3& matrix, const sf::Vector2f& center, const sf::Vector2f& size, float rotation)
	{
		return matrix.Projection(center, size, rotation);
	}


// Window
	sf::VideoMode VideoModeGetDesktopMode(sf::VideoMode& videomode)
	{
		return videomode.GetDesktopMode();
	}

	const std::vector<sf::VideoMode> VideoModeGetFullscreenModes(sf::VideoMode& videomode)
	{
		return videomode.GetFullscreenModes();
	}
}